home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 051-060 / amok52 / abitur / txt / bammel.mod < prev    next >
Text File  |  1993-11-04  |  3KB  |  131 lines

  1. IMPLEMENTATION MODULE Bammel;
  2.  
  3. FROM AbiturScreen IMPORT AddAbiTxtLin, ShowAbiTxt, blaU;
  4. FROM RandomNumber IMPORT RND;
  5. FROM Intuition IMPORT WindowPtr;
  6. FROM Exec      IMPORT AllocMem, FreeMem, MemReqSet, MemReqs;
  7. FROM Arts IMPORT TermProcedure, Assert;
  8. FROM SYSTEM IMPORT ADR;
  9. FROM Graphics IMPORT Move, Text, SetAPen;
  10. FROM Str IMPORT Copy, Length;
  11. FROM Dos IMPORT Open, Close, oldFile, FileHandlePtr;
  12. FROM LineReader IMPORT ReadALine;
  13.  
  14. CONST MaxSLen = 32;
  15.       MaxZeil = 25;
  16.  
  17. TYPE BammelString = ARRAY[0..MaxSLen] OF CHAR;
  18.  
  19.      BammelElePtr = POINTER TO BammelEle;
  20.      BammelEle    = RECORD
  21.                        Next: BammelElePtr;
  22.                        Count: INTEGER;
  23.                        Txt: ARRAY[1..MaxZeil] OF BammelString
  24.                     END;
  25.  
  26. VAR GBammel, B: BammelElePtr;
  27.     BFHP: FileHandlePtr;
  28.  
  29.  
  30.  
  31. PROCEDURE ShowRNDBammelText;
  32. VAR Count: INTEGER;
  33.     ToShow: BammelElePtr;
  34.     i:INTEGER;
  35.     W: WindowPtr;
  36. BEGIN
  37.    Count := RND(500);
  38.    ToShow := GBammel;
  39.    IF Count > 0 THEN
  40.       FOR i := 1 TO Count DO
  41.          IF ToShow^.Next = NIL THEN
  42.             ToShow := GBammel
  43.          ELSE
  44.             ToShow := ToShow^.Next
  45.          END
  46.       END
  47.    END; (* Hier: ToShow gefunden *)
  48.  
  49.    FOR i := 1 TO ToShow^.Count DO
  50.       AddAbiTxtLin(ToShow^.Txt[i])
  51.    END;
  52.    ShowAbiTxt(blaU)
  53. END ShowRNDBammelText;
  54.  
  55.  
  56.  
  57. PROCEDURE FreeBammel;
  58. VAR Tmp : BammelElePtr;
  59. BEGIN
  60.    WHILE GBammel # NIL DO
  61.       Tmp := GBammel;
  62.       GBammel := GBammel^.Next;
  63.       FreeMem(Tmp, SIZE(BammelEle))
  64.    END
  65. END FreeBammel;
  66.  
  67.  
  68.  
  69.  
  70.  
  71. PROCEDURE GetABammel(VAR B: BammelElePtr): BOOLEAN;
  72. VAR EOFile: BOOLEAN;
  73.     Str: ARRAY [0..MaxSLen] OF CHAR;
  74.     TmpB: BammelElePtr;
  75.     i: INTEGER;
  76.     AktLine: INTEGER;
  77. BEGIN
  78.     ReadALine(BFHP, Str, EOFile);
  79.     IF EOFile THEN
  80.        B := NIL;
  81.        RETURN FALSE
  82.     ELSE
  83.        TmpB := AllocMem(SIZE(BammelEle), MemReqSet{public});
  84.        Assert(TmpB#NIL, ADR("Kein Bammel Speicher"));
  85.        FOR i := 1 TO MaxZeil DO
  86.           TmpB^.Txt[i][0] := 0C
  87.        END;
  88.        IF Length(Str) > 0 THEN
  89.           Str[0] := " "
  90.        END;
  91.        Copy(TmpB^.Txt[1], Str);
  92.        AktLine := 2;
  93.     END;
  94.     REPEAT
  95.        ReadALine(BFHP, Str, EOFile);
  96.        IF NOT EOFile THEN
  97.           IF Str[0] # "@" THEN
  98.              IF Length(Str) > 0 THEN
  99.                 Str[0] := " "
  100.              END;
  101.              Copy(TmpB^.Txt[AktLine], Str);
  102.              IF AktLine < MaxZeil THEN INC(AktLine) END
  103.           END
  104.        END
  105.     UNTIL EOFile OR (Str[0] = "@");
  106.     TmpB^.Count := AktLine - 1;
  107.     B := TmpB;
  108.     RETURN TRUE
  109. END GetABammel;
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116. BEGIN
  117.    GBammel := NIL;
  118.    TermProcedure(FreeBammel);
  119.  
  120.    BFHP := Open(ADR("Text/Bammel"), oldFile);
  121.    IF BFHP # NIL THEN
  122.       WHILE GetABammel(B) DO
  123.          B^.Next := GBammel;
  124.          GBammel := B
  125.       END
  126.    END;
  127.    Close(BFHP)
  128. END Bammel.mod
  129.  
  130.  
  131.